/*
	二叉树的链式存储结构：
*/

#include "BinaryTree.c"

BinTree CreateTree(dataType	x){
/*初始化二叉树函数1.先决条件:无2.函数作用:初始化一棵空的带头结点的二叉树,返回头结点的地址*/
	BinTree tree;
	tree = (BinTree)malloc(sizeof(TreeNode));
	tree->Data = x;
	tree->Left = NULL;
	tree->Right = NULL;
	return tree;
}
/*
	建立一棵以x为根结点的数据域信息，以二叉树lbt和rbt为左右子树的二叉树。
	建立成功时返回所建二叉树结点的指针；建立失败时返回空指针。
*/
BinTree Create(dataType	 x, BinTree lbt, BinTree rbt){
	//先生成一个结点。
	TreeNode *p = (TreeNode*)malloc(sizeof(TreeNode));
	if( p ){
		p->Data = x; 
		p->Left = lbt;
		p->Right = rbt; 
		return p;
	}
	return NULL;
	
}
/*给parent插入左子树*/
BinTree InsertL(BinTree tree, dataType x, BinTree parent){
	BinTree PtrT;
	//如果父节点为null则无法插入
	if( parent == NULL ){
		return NULL;
	} 
	//内存分配失败的情况 
	if( (PtrT = (BinTree*)malloc(sizeof(BinTree))) == NULL ){
		return NULL;
	}
	PtrT->Data = x;
	PtrT->Left = NULL;
	PtrT->Right = NULL;
	
	//将新申请的PtrT链接到parent后面,如果parent有子树，则将子树拼接在新节点后面,没子树则添加
	if( parent->Left == NULL ){
		parent->Left = PtrT; 
	}else{
		PtrT->Left = parent->Left;
		parent->Left = PtrT; 
	} 
	return tree;
} 

/*删除parent的左子树*/
BinTree DeleteL(BinTree bt, TreeNode *parent){
	//如果parent或者parent的左子树为NULL，没法删除。 
	if( parent == NULL || parent->Left == NULL ){
		puts("删除失败");
		return NULL; 
	} 
	//
	TreeNode *p = parent->Left;
	parent->Left = NULL;
	free(p);
 	return bt;
}


int IsEmpty(BinTree Bt){
/*判断二叉树是否为空，先决条件：BinTree已初始化，Bt为根节点。结果：bt为空则返回0，否则返回1*/ 
	if(Bt->Data	){
	} 
	return 1;
}

int main(){
	TreeNode *lchild = CreateTree( 2 );
	TreeNode *rchild = CreateTree( 3 );
	BinTree tree = Create(1, lchild, rchild);
	InorderTrverse(tree);
	InsertL(tree, 4, lchild);
	InorderTrverse(tree);
	DeleteL(tree, lchild);
	InorderTrverse(tree);
}

